『Beyond Notations: Hygienic Macro Expansion for Theorem Proving Languages』
Sebastian Ullrich, Leonardo de Moura. Beyond Notations: Hygienic Macro Expansion for Theorem Proving Languages. 2020. https://arxiv.org/abs/2001.10490
1. どんなもの?
対話的定理証明支援系(ITP)で初の衛生的マクロを実現したことについて
2. 先行研究と比べてどこがすごい?
他の定理証明支援系のマクロより衛生的で使いやすいマクロシステムを実装した
3. 技術や手法のキモはどこ?
Schemeのマクロシステムを参考にした衛生的なマクロアルゴリズム
4. どうやって有効だと検証した?
実装して確認した?
5. 議論はある?
6. 次に読むべき論文は?
GitHub: Kha/macro-supplement: Supplemental material for the "Beyond Notations" paper
table:訳
Interactive Theorem Proving(ITP) 対話的定理証明支援系
Hygienic Macro 衛生的マクロ、健全なマクロ
not only A but B AだけでなくBも
rudimentary 初歩的な
counterintuitive 常識[直観]に反する[そぐわない]
arity アリティ(関数の引数の数)
terse 簡単な、明瞭な
statically 静的な
vice versa 逆も同様に
syntactic category 文法的範疇、構文カテゴリ
type-aware elaboration 型を意識した精緻化?
elaboration 精緻化?、エラボレーション?
right-hand side 右辺
1. Introduction
Mixfix notation systems
Lean 4 マクロ
Lispはマクロで構文木を返す?
[RF12] Jon Rafkind and Matthew Flatt. Honu: syntactic extension for algebraic notation through enforestation. In ACM SIGPLAN Notices, volume 48, pages 122–131. ACM, 2012.
Juliaも衛生的なマクロを持っている
Elaborator
https://github.com/leanprover/lean4/tree/IJCAR20-LMCS/src/Lean/Elab
infixr, infixl
パターンベース、手続き的なベース
2. The New Macro System
関連: Lisp
Haskellである、遅延評価を実現するデータ構造?のthunkを定義している
code:memo
macro "defthunk" id:ident ":=" e:term : command =>
`(def $id := Thunk.mk (fun _ => $e))
defthunk big := mkArray 100000 true
code:memo
syntax term "`" term ":" term : term
macro_rules
| ($Γ $e : $τ ) => `(Typing $Γ $e $τ )
macro_rulesという書き方はRustのマクロのmacro_rules!を思い出す
Rust マクロ
Coq マクロ
\`()
\`の記号自体はバッククォート
準クオート(quasiquotation)
$
アンクォート(論文中ではanti-quotation)
$に続く引数を評価する
code:lisp
;; ref: On Lisp 2. 変数捕捉と多重評価
(defmacro for ((var start stop) &body body)
(let ((gstop (gensym)))
`(do ((,var ,start (1+ ,var)) (,gstop ,stop)) ((>= ,var ,gstop))
,@body)))
MathCompのbigop
code:memo
\sum_ (i <- 0, 2, 4 | i != 2) i
マクロシステムが洗練されていないため12個も似たようなマクロを定義しないといけない
GitHub: math-comp/mathcomp/ssreflect/bigop.v at master · math-comp/math-comp
Gallina
3. Hygiene Algorithm
table:訳
conventional 従来の
elaborator エラボレーター?精緻化器...? 推敲器...?
syntax quotation
subsequent その後の
macro expander マクロ展開器
マクロの展開前にスコープの設定をしないといけない
Expantion Algorithm
マクロ展開器がマクロを全部展開する
これ以上展開できないのはcore forms
Leanのマクロにはsyntactic categoryがない
n.msc1.msc2.. . ..mscn{tsc1,. . .,tscn}
n: オリジナル名称
msc: マクロスコープ
tsc: トップレベルスコープ
グローバルコンテキスト(globbal context)
ローカルコンテキスト(local context)
懐かしいアナフォリックマクロが出てきた
4. Implementation
table:訳
identifiers 識別子
構文オブジェクト(Syntax object)
リテラル(literal)
リテラルとは、プログラムのソースコードにおいて使用される、数値や文字列を直接に記述した定数のことである。
用語検索 - ZDNET Japan
Haskell モナド
TransformerM monad
TransformerM Syntax where the TransformerM monad gives access to the global context and a fresh macro scope per macro expansion
ExpanderM monad
Haskell 2010からdo記法が導入された
セマンティクス
\`(a + $b)のような()で囲んでいるものをquotationと呼ぶ?
5. Integrating Macros into Elaboration
6. Tactic Hygiene
7. Best-Effort Eager Name Analysis in Macros
8. Related Work
9. Conclusion
参考
syntactic categoryとは・意味・使い方・読み方・例文 - 英ナビ!辞書 英和辞典
#文献